跳到主要内容

超时触发器

1.启动超时触发器

有一种需求,是在运行一定时间后,触发一个事件。比如某个对话框提示呈现后,需要在几秒钟之后自动消失。

Egret提供的egret.setTimeout可实现上述功能。该函数原型为:

function  setTimeout(listener: Function, thisObject: any, delay: number,  ...args: any[]):  number;
  • listener是待执行的回调函数
  • thisObject设置为this即可
  • delay设定超时等待的毫秒数,
  • ...args为随意个数的参数,也可以没有任何参数。

下面示例演示超时触发器的使用方法:

const idTimeout:  number  = egret.setTimeout(function  (arg)  {
console.log("timeout:", arg);
}, this, 3000, "egret");
console.log("start setTimeout");

编译运行,首先输出"start setTimeout",等待3秒后,将会出现"timeout: egret",证实触发器准确运行。

2.停止超时触发器

超时等待阶段,可能会有需求,停止超时触发器,接着上述示例,如果在超时结束前用户触摸对话框的关闭或确定按钮,就需要取消超时触发器。Egret 提供 egret.clearTimeout 取消超时触发器。在 egret.setTimeout 执行时返回一个 id:idTimeout ,这个id就是用来取消超时触发器的:

egret.clearTimeout(idTimeout);

在超时等待结束前,执行该语句,将会停止超时触发器,回调函数将不再会执行。

超时等待结束时,将立即执行回调函数,此后执行egret.clearTimeout将不再有意义。

注意,本教程所用的egret.setTimeoutegret.clearTimeout均在egret包下,这是 Egret 引擎实现的超时触发器,跟javascript本身的setTimeoutclearTimeout不可混用。即执行egret.setTimeout返回的超时id,无法用javascript本身的clearTimeout来停止,反之亦然。